package danliebiao1;

import java.util.function.Consumer;
import java.util.regex.Pattern;

public class SinglyLinkedList {
    Node head=null; //头指针



    //节点类
    private static class Node {
        int value;  //值
        Node next;  //下一个节点指针

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    public void addFirst(int value) {
        //链表为空
        // head = new Node(value, null);
        //链表非空
        head = new Node(value, head);


    }

    public void loop(){
        Node p=head;
        while(p!=null){
            System.out.println(p.value);//处理完当前节点
            p = p.next;  //更新指针，指向下一个节点
        }
    }
    public void loop1(Consumer<Integer> consumer){
        Node p=head;
        while(p!=null){
           consumer.accept(p.value);//处理完当前节点
            p = p.next;  //更新指针，指向下一个节点
        }
    }

    private Node findLast(){
        if(head==null){ //空链表
            return null;
        }
        Node p;
        for(p=head;p.next!=null;p=p.next){

        }
        return p; //找到最后一个节点

    }

    public void addLast(int value){
        Node last = findLast();
        if(last==null){
            addFirst(value);
            return;
        }
        last.next=new Node(value,null);

    }

    /*public void test(){
        int i=0;
        for(Node p=head;p!=null;p=p.next,i++){
            System.out.println(p.value+"索引："+i);
        }
    }*/

    private Node findNode(int index){
        int i=0;
        for(Node p=head;p!=null;p=p.next){
            if(i==index){
                return p;
            }
        }
        return null; //没有找到

    }

    public int get(int index){
        Node node = findNode(index);
        if(node==null){
            throw new IllegalStateException(
                    String.format("index不合法",index));

        }
        return node.value;
    }

}
